perm filename MIXLCS.FAI[TMP,LCS]1 blob sn#193566 filedate 1975-12-23 generic text, type T, neo UTF8
00100		TITLE MIXER
00200		A←1 ↔ B←2 ↔ C←3 ↔ D←4 ↔ E←5
00300		DUR←6 ↔ MAX←7 ↔ R1←10 ↔ R2←11
00400		R3←12 ↔ BC1←13 ↔ BC2←14 ↔ BC3←15
00500		P←17 ↔ NBUFS←←4
00600		DEFINE FIXX(N)
00700	   <	JUMPGE	N,.+5
00800		MOVNS	N
00900		FIX	N,233000
01000		MOVNS	N
01100		CAIA
01200		FIX 	N,233000    >
01300		DEFINE FLOAT(N)
01400	   <	TLC N,232000
01500		FADR N,N   >
01600	
01700	MIXER:	MOVE P,[IOWD 20,PDL]
01800		CLRBFI
01900		OUTSTR [ASCIZ/
02000		TYPE FIRST NAME : /]
02100		SETZ BC1,
02200		PUSHJ P,GNAME
02300		OPEN 11,[14↔'DSK   '↔BUF1]
02400		JRST 4,.
02500		INBUF 11,NBUFS
02600		LOOKUP 11,FILNAM
02700		JRST MIXER
02800		AOJ BC1,
02900	
03000	SECOND:	CLRBFI
03100		OUTSTR [ASCIZ/	TYPE SECOND NAME : /]
03200		PUSHJ P,GNAME
03300		OPEN 2,[14↔'DSK   '↔BUF2]
03400		JRST 4,.
03500		INBUF 2,NBUFS
03600		LOOKUP 2,FILNAM
03700		JRST SECOND
03800		AOJ BC1,
03900	
04000		CLRBFI
04100		OUTSTR [ASCIZ/	NUMBER OF CHANNELS = /]
04200		INCHWL A
04300		PUSHJ P,INNUM
04400		SKIPLE
04500		CAILE 4
04600		HRRZI 1
04700		HRRZM NCHNLS#
04800		CLRBFI
04900		OUTSTR [ASCIZ/	SRATE = /]
05000		INCHWL A
05100		PUSHJ P,INNUM
05200		SKIPN
05300		HRRZI =10000
05400		FLOAT(0)
05500		MOVEM FSRATE#
05600		PUSHJ P,GDLAY
05700		MOVEM SNUM2#
05800	
05900	GRAT:	CLRBFI
06000		OUTSTR [ASCIZ/	SPLICE OR RATIO (S OR <R1>:<R2>) = /]
06100		INCHWL A
06200		CAIE A,"s"
06300		CAIN A,"S"
06400		JRST SPLICE
06500		SETZM SFLG#
06600		PUSHJ P,GETNUM
06700		SKIPG R1,
06800		MOVE R1,[DOT5:	=0.5]
06900		FMPR R1,[=4096.]
07000		FIXX(R1)
07100		INCHRS A
07200		JRST .+3
07300		PUSHJ P,GETNUM
07400		SKIPG R2,
07500		MOVE R2,DOT5
07600		FMPR R2,[=4096.]
07700		FIXX(R2)
07800		PUSHJ P,ONAME
07900		AOJ BC2,
08000		SETZ MAX,
08100		SETOM DFLG#
08200	DLAY:	ADD DUR,BC1
08300		CAML DUR,SNUM2
08400		JRST FIND
08500		PUSHJ P,MOV
08600		PUSHJ P,IN1
08700		JRST DLAY
08800	
08900	MOV:	ILDB D,A
09000		TDON D,[NEG: 777777774000]
09100		LDB D,A
09200		IMUL D,R1
09300		ASH D,-14
09400		CAMLE D,MAX
09500		MOVE MAX,D
09600		IDPB D,C
09700		SOJLE BC3,MOVO
09800		SOJG BC1,MOV
09900		POPJ P,
10000	
10100	MOVO:	PUSHJ P,OBUF
10200		SOJG BC1,MOV
10300		POPJ P,
10400	
10500	FIND:	SOJ BC2,
10600		SUB DUR,SNUM2
10700		SUB BC1,DUR
10800		SKIPLE BC1
10900		PUSHJ P,MOV
11000	SETFLG:	SETZM DFLG
11100		MOVE BC1,DUR
11200		MOVE DUR,SNUM2
11300		ADD DUR,BC2
11400		
11500	MIX:	ILDB D,A
11600		TDON D,NEG
11700		LDB D,A
11800		ILDB E,B
11900		TDON E,NEG
12000		LDB E,B
12100		IMUL D,R1
12200		IMUL E,R2
12300		ADD D,E
12400		ASH D,-14
12500		CAMLE D,MAX
12600		MOVE MAX,D
12700		IDPB D,C
12800		SOJLE BC3,MIXO
12900	CKIN:	SOJLE BC1,MIXI
13000		SOJG BC2,MIX
13100		PUSHJ P,IN2
13200		ADD DUR,BC2
13300		JRST MIX
13400	
13500	MIXO:	PUSHJ P,OBUF
13600		JRST CKIN
13700	MIXI:	PUSHJ P,IN1
13800		JRST CKIN+1
13900	SPLICE:	SETOM SFLG#
14000		PUSHJ P,ONAME
14100		MOVE [SPLOP,,MAX]
14200		BLT R3
14300	SLOOP:	ADD DUR,BC3
14400		CAML DUR,SNUM2
14500		JRST NXPART
14600		PUSHJ P,MAX
14700		PUSHJ P,OBUF
14800		PUSHJ P,IN1
14900		JRST SLOOP
15000	
15100	SPLOP:	ILDB D,A
15200		IDPB D,C
15300		SOJG BC3,MAX
15400		POPJ P,
15500	
15600	NXPART:	SUB DUR,SNUM2
15700		SUB BC3,DUR
15800		SKIPLE BC1,BC3
15900		PUSHJ P,MAX
16000	
16100		CLRBFI
16200		OUTSTR [ASCIZ/
16300		TYPE NEXT NAME OR <CR>: /]
16400		EXCH BC1,[MINO:	-1]
16500		PUSHJ P,GNAME
16600		EXCH BC1,MINO
16700		OPEN 11,[14↔'DSK   '↔BUF1]
16800		JRST 4,.
16900		INBUF 11,NBUFS
17000		LOOKUP 11,FILNAM
17100		JRST FINSH
17200		PUSHJ P,GDLAY
17300		MOVEM SNUM3#
17400		CAMG SNUM2
17500		JRST 			;;;;→→
17600		
17700	
17800	FINSH:	MOVE A,B
17900		SKIPLE BC3,DUR
18000		PUSHJ P,MAX
18100		PUSHJ P,OBUF 
18200		EXCH DUR,SNUM2
18300	FIL2:	ADD DUR,BC2
18400		SKIPLE BC3,BC1
18500		PUSHJ P,MAX
18600		PUSHJ P,IN2
18700		MOVE A,B
18800		SKIPLE BC3,SNUM2
18900		PUSHJ P,MAX
19000		PUSHJ P,OBUF
19100		JRST FIL2
19200	IN1:	IN 11,
19300		CAIA
19400		JRST CKEOF
19410		MOVE R3,BUF1
19420		HRRZ R3,2(R3)
19430		CAIN R3,525252	;GO BACK IF THIS IS A 'HEADER'
19440		JRST IN1
19450	
19500		HRRZI BC1,3
19600		IMUL BC1,BUF1+2
19700		HRRZ A,BUF1+1
19800		HRLI A,1400
19900		POPJ P,
20000	
20100	CKEOF:	STATO 11,20000
20200		JRST 4,.
20300		SETOM EOF1
20400		SKIPGE EOF2
20500		JRST DONE
20600		SKIPL SFLG
20700		SKIPGE DFLG
20800		JRST BREAK
20900	PART2:	MOVE R1,R2
21000		SOJLE BC2,GMOR
21100		MOVE BC1,BC2
21200		MOVE A,B
21300		PUSHJ P,MOV
21400	GMOR:	PUSHJ P,IN2
21500		ADD DUR,BC2
21600		JRST PART2+2
21700	
21800	BREAK:	SUB DUR,SNUM2
21900		SKIPGE SFLG
22000		JRST ZSPL
22100		SETZ D,
22200	ZRIT:	IDPB D,C
22300		SOJLE BC3,ZOB
22400		AOJL DUR,ZRIT
22500		MOVE DUR,SNUM2
22600		JRST PART2
22700	
22800	ZOB:	PUSHJ P,OBUF
22900		JRST ZRIT+2
23000	
23100	ZSLOP:	ADD DUR,BC3
23200		JUMPG DUR,ZEND
23300		HRLI C,-200
23400		SETZM 1(C)
23500		AOBJN C,.-1
23600		PUSHJ P,OBUF
23700	ZSPL:	JUMPL DUR,ZSLOP
23800		HRRZI BC1,600
23900		JRST EQEND
24000	
24100	ZEND:	MOVE DUR
24200		SUB BC3
24300		MOVN BC1,
24400		SETZ
24500		IDPB C
24600		AOJL .-1
24700	EQEND:	MOVE A,B
24800		POP P,D
24900		JRST FIL2-1		;;;;→→→→
25000	
25100	
25200	IN2:	IN 2,
25300		CAIA
25400		JRST CKEOF2
25410		MOVE R3,BUF2
25420		HRRZ R3,2(R3)
25430		CAIN R3,525252	;GO BACK IF THIS IS A 'HEADER'
25440		JRST IN2
25450	
25500		HRRZI BC2,3
25600		IMUL BC2,BUF2+2
25700		HRRZ B,BUF2+1
25800		HRLI B,1400
25900		POPJ P,
26000	
26100	CKEOF2:	STATO 2,20000
26200		JRST 4,.
26300		SETOM EOF2
26400		SKIPGE SFLG
26500		JRST 			;;;;→→→→→
26600		SKIPGE EOF1
26700		JRST DONE
26800		ADD DUR,BC1
26900		PUSHJ P,MOV
27000		PUSHJ P,IN1
27100		JRST .-3
27200	
27300	OBUF:	HRRM C,BUF3+1
27400		OUT
27500		CAIA
27600		JRST 4,.
27700		HRRZI BC3,3
27800		IMUL BC3,BUF3+2
27900		HRRZ C,BUF3+1
28000		HRLI C,1400
28100		POPJ P,
28200	
28300	ONAME:	CLRBFI
28400		OUTSTR [ASCIZ/	OUTPUT NAME : /]
28500		PUSHJ P,GNAME
28600		OPEN [14↔'DSK   '↔BUF3,,0]
28700		JRST 4,.
28800		OUTBUF NBUFS
28900		ENTER FILNAM
29000		JRST ONAME
29100		PUSHJ P,OBUF+1
29200		SETZM EOF1#
29300		SETZM EOF2#
29400		SETZ DUR,
29500		PUSHJ P,IN1
29600		PUSHJ P,IN2
29700		POPJ P,
29800	GDLAY:	CLRBFI
29900		OUTSTR [ASCIZ/	DELAY TIME = /]
30000		INCHWL A
30100		PUSHJ P,GETNUM
30200		HRRZ A,NCHNLS
30300		FLOAT(A)
30400		FMPR A
30500		FMPR FSRATE
30600		FIXX(0)
30700		POPJ P,
30800	
30900	DONE:	PUSHJ P,OBUF
31000		RELEAS
31100		SKIPGE SFLG
31200		JRST NOMAX
31300		OUTSTR [ASCIZ/
31400		MAX AMPL = /]
31500		MOVE MAX
31600		PUSHJ P,OUTINT
31700	NOMAX:	OUTSTR [ASCIZ/
31800		NUMBER OF SAMPLES = /]
31900		MOVE DUR
32000		PUSHJ P,OUTINT
32100		OUTSTR [ASCIZ/
32200		TOTAL DUR = /]
32300		IDIV DUR,NCHNLS
32400		FLOAT(DUR)
32500		FDVR DUR,FSRATE
32600		MOVE DUR
32700		FIXX(0)
32800		PUSHJ P,OUTINT
32900		HRRZI "."
33000		OUTCHR
33100		MOVE DUR
33200		FIXX(DUR)
33300		FLOAT(DUR)
33400		FSBR DUR
33500		FMPR [=10000.]
33600		FIXX(0)
33700		AOJ
33800		IDIVI =10
33900		PUSHJ P,OUTINT
34000		EXIT
34100	NAME:	'MUSIC '
34200		'MUSAA '
34300		'MUSIC '
34400	EXT:	'MUS   '
34500		'DMD   '
34600		'MUS   '
34700	NONAM:	SKIPL SFLG
34800	 	MOVE A,NAME(BC1)
34900		JRST GEXT
35000	GNAME:	SETZM FILEXT+1
35100		SETZM FILPPN
35200		MOVE A,EXT(BC1)
35300		MOVEM A,FILEXT
35400		PUSHJ P,GETNAM
35500		JUMPE A,NONAM
35600	GEXT:	MOVEM A,FILNAM
35700		CAIE C,"."
35800		JRST NOEXTN
35900		PUSHJ P,GETNAM
36000		MOVEM A,FILEXT
36100	NOEXTN:	CAIE C,"["
36200		JRST FFDX
36300		PUSHJ P,GETP
36400		HRLZM A,FILPPN
36500		PUSHJ P,GETP
36600		HRRM A,FILPPN
36700	FFDX:	INCHRW C
36800		CAIE C,12
36900		JRST FFDX
37000		POPJ P,
37100	GETNAM:	MOVEI A,
37200		MOVE B,[440600,,A]
37300	GETNML:	PUSHJ P,RCH
37400		POPJ P,
37500		SUBI C,40
37600		TLNE B,770000
37700		IDPB C,B
37800		JRST GETNML
37900	
38000	GETP:	MOVEI A,
38100	GETPL:	PUSHJ P,RCH
38200		POPJ P,
38300		TRNE A,770000
38400		JRST GETPL
38500		LSH A,6
38600		ADDI A,-40(C)
38700		JRST GETPL
38800	
38900	RCH:	INCHWL C
39000		CAIN C,42
39100		JRST RCHQ
39200		CAIE C,11
39300		CAIN C," "
39400		JRST RCH
39500		CAIE C,"."
39600		CAIN C,","
39700		POPJ P,
39800		CAIE C,"["
39900		CAIN C,"]"
40000		POPJ P,
40100	RCHQR:	CAIGE C,40
40200		POPJ P,
40300		CAIL C,"a"
40400		CAILE C,"z"
40500		CAIA
40600		SUBI C,40
40700	POPJ1:	AOS (P)
40800		POPJ P,
40900	
41000	RCHQ:	INCHWL C
41100		JRST RCHQR
41200	GETNUM:	PUSHJ P,INNUM
41300		FLOAT(0)
41400		CAIE A,"."
41500		POPJ P,
41600		MOVE C,
41700		INCHRS A
41800		POPJ P,
41900		PUSHJ P,INNUM
42000		JUMPE NODP
42100		FLOAT(0)
42200		FMPR TABL(B)
42300	NODP:	FADR C
42400		POPJ P,
42500	
42600	TABL:	=0.1
42700		=0.01
42800		=0.001
42900		=0.0001
43000		=0.00001
43100	
43200	INNUM:	SETZ
43300		SETO B,
43400		CAIL A,60
43500		CAILE A,71
43600		POPJ P,
43700		IMULI =10
43800		ADDI -60(A)
43900		AOJ B,
44000		INCHRS A
44100		POPJ P,
44200		JRST INNUM+2
44300	
44400	OUTINT:	HRRZI B,7
44500		JUMPE OUTZ
44600		IDIVI =10
44700		ADDI A,60
44800		HRRZM A,BLK(B)
44900		SOJGE B,OUTINT+1
45000	OCHR:	OUTCHR BLK+1(B)
45100		CAIGE B,6
45200		AOJA B,OCHR
45300		POPJ P,
45400	OUTZ:	CAIL B,7
45500		HRLZI B,300000
45600		JRST OCHR
45700	
45800	FILNAM:	0
45900	FILEXT:	0
46000		0
46100	FILPPN:	0
46200	BUF1:	BLOCK 3
46300	BUF2:	BLOCK 3
46400	BUF3:	BLOCK 3
46500	PDL:	BLOCK 44
46600	ACBLK:	BLOCK 20
46700	BLK:	BLOCK 10
46800		END MIXER